﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace MCSharpLib.MUtility
{
    public class CHCode
    {
        public static string CHToC(string input)
        {
            //清理输出文本框
            string output="";
            string filename = @"Dictionary\\Dictionary.xml"; ;

            //要转换的文本不能为空
            if (string.IsNullOrEmpty(input))
            {
                
                return "";
            }

            //Regex.Replace(input, @"[^\u4e00-\u9fa5]*", "");

            //生成词典
            PinyinDictionary dict = new PinyinDictionary(@filename);

            //只取词典中的中文词汇，无需拼音
            List<string> wordList = new List<string>();
            foreach (string str_iterator in dict.Dictionary.Keys)
            {
                wordList.Add(str_iterator);
            }

            //进行正向分词
            List<string> wordsLeft = Segmentation.SegMMLeftToRight(input, ref wordList);

            //判断分词是否正常返回
            if (wordsLeft == null)
            {
                
                return "";
            }

            //转为拼音
            string pinyin = "";
            foreach (string word in wordsLeft)
            {
                //如果是单字，要检测字典中是否包含该单字
                if (word.Length == 1 && !dict.Dictionary.ContainsKey(word))
                {
                    //如果词典中不包含该中文单字，就要从微软的dll库读取拼音
                    pinyin = PinyinConvert.GetFirstPinYinCount(word.ToCharArray()[0]).ToLower();
                }
                else
                {
                    //一般情况不用检测，直接取词典中的拼音即可
                    pinyin = dict.Dictionary[word].ToLower();
                }
                 //这个正则表达式表示，去掉字符串中的数字
                pinyin = Regex.Replace(pinyin, @"\d", "");


                //将拼音显示出来
                output += pinyin;

                //结尾加个空格
                output += " ";
            }

            //去掉最后一个空格
            output = output.Trim();
            string[] arr = output.Split(' ');
            string out_str="";
            foreach(string s in arr ){
                if(s!="")
                    out_str+=s[0];
            }
            return out_str.ToUpper();
        }
    }
}
